package com.yao.code;

/**
 * @author yaoquanwei
 * @date 2021/8/12 10:33
 */
public class Code210812 {
    /**
     * 剑指offer 11.旋转数组的最小数字
     *
     * @param numbers
     * @return
     */
    public static int minArray(int[] numbers) {
        int i = 0;
        while (i < numbers.length - 1) {
            if (numbers[i] > numbers[i + 1]) {
                return numbers[i + 1];
            }
            i++;
        }
        return numbers[0];
    }

    /**
     * 剑指offer 50.第一个只出现一次的字符
     *
     * @param s
     * @return
     */
    public static char firstUniqChar(String s) {
        int[] tar = new int[26];
        for (int i = 0; i < s.length(); i++) {
            tar[s.charAt(i) - 'a']++;
        }
        for (int i = 0; i < s.length(); i++) {
            if (tar[s.charAt(i) - 'a'] == 1) {
                return s.charAt(i);
            }
        }
        return ' ';
    }

    /**
     * 剑指offer 04.二维数组中的查找
     *
     * @param matrix
     * @param target
     * @return
     */
    public static boolean findNumberIn2DArray(int[][] matrix, int target) {
        if (matrix.length == 0) {
            return false;
        }
        if (matrix[0].length == 0) {
            return false;
        }
        int n = matrix.length;
        int m = matrix[0].length;
        // 如果最后一个都小于目标值，直接返回
        if (matrix[n - 1][m - 1] < target) {
            return false;
        }
        return binaryFind(matrix, n, m, 0, target);
    }

    /**
     * 二分查找二维数组
     *
     * @param matrix 要查找到数组
     * @param n      要查找的数组的行数
     * @param m      要查找的数组的列数
     * @param target 目标值
     * @return 结果
     */
    public static boolean binaryFind(int[][] matrix, int n, int m, int i, int target) {
        if (m <= 0 || i >= n) {
            return false;
        }
        // 比较右上角数值
        if (matrix[i][m - 1] == target) {
            return true;
        } else if (matrix[i][m - 1] < target) {
            for (int j = i; j < n; j++) {
                if (matrix[j][m - 1] == target) {
                    return true;
                }
            }
        } else {
            for (int j = 0; j < m - 1; j++) {
                if (matrix[i][j] == target) {
                    return true;
                }
            }
        }
        return binaryFind(matrix, n, m - 1, i + 1, target);
    }

    public static void main(String[] args) {
        int[][] arr = {{-1}, {-1}};
        int tar = -2;
        System.out.println(findNumberIn2DArray(arr, tar));
    }
}
